KnigaRead.com/
KnigaRead.com » Научные и научно-популярные книги » Радиотехника » Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]

Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]". Жанр: Радиотехника издательство -, год -.
Перейти на страницу:

В табл. 11.1 приведен полный набор команд МП 68000. Чтобы образовать правильный оператор (команду) языка ассемблера, следует указать операнды (с помощью одного из 12 режимов адресации) и тип данных (байтов, слово или длинное слово). На языке ассемблера фирмы Motorola оператор выглядит следующим образом:

ОПЕРАЦИЯ. размер источник, приемник

Здесь ОПЕРАЦИЯ берется из табл. 11.1, размер есть В, W или L (байт, слово или длинное слово соответственно), а источник и приемник могут представлять регистры, непосредственные константы или ячейки памяти. Ниже приведено несколько примеров с указанием способов адресации.


Таблица 11.1. Набор команд МП 68000/8

Операция · Описание

Арифметические

ABCD Сложение упакованных двоично-десятичных чисел

ADD Сложение

ASL Арифметический сдвиг влево

ASR Арифметический сдвиг вправо

CLR Очистка операнда

DIVS Деление (знаковое)

DIVU Деление (беззнаковое)

EXT Расширение знака

LSL Логический сдвиг влево

LSR Логический сдвиг вправо

MOVE Пересылка

MULS Умножение (знаковое)

MULU Умножение (беззнаковое)

NBCD Отрицание упакованного двоично-десятичного числа

NEG Отрицание

SBCD Вычитание упакованного двоично-десятичного числа

SUB Вычитание


Логические

AND Логическое И

BCHG Проверка и изменение бита

BCLR Проверка и очистка бита

BSET Проверка и установка бита

BTST Проверка бита

CHK Проверка регистра на границы

CMP Сравнение

EOR Исключающее ИЛИ

EXG Обмен регистров

NOT Побитовое дополнение

OR Логическое ИЛИ

RESET Возбуждение линии RESET

ROL Циклический сдвиг влево без расширения

ROR Циклический сдвиг вправо без расширения

ROXL Циклический сдвиг влево с расширением

ROXR Циклический сдвиг вправо с расширением

Scc1) Установить байт по условию

SWAP Обмен половин регистра

TAS Проверка и установка операнда

TST Проверка операнда и установка флагов


Управления

Всс1) Условный переход

BRA Безусловный переход (относительный)

BSR Переход на подпрограмму (относительный)

DBcc1) Проверка, декремент и переход

JMP Безусловный переход (7 режимов)

JSR Переход на подпрограмму (7 режимов)

LEA Загрузка эффективного адреса

LINK Подсоединение стека

NOP Холостая команда

PEA Загрузка в стек эффективного адреса

RTE Возврат из исключения

RTR Возврат, восстановление кодов условий

RTS Возврат из подпрограммы

STOP Останов

TRAP Ловушка (векторизованное исключение)

TRAPV Ловушка по переполнению

UNLK Отсоединение стека


Коды условий ("сс")

СС Перенос сброшен

CS Перенос установлен

EQ Равенство нулю

F Никогда не истина2)

GE Больше или равно нулю

GT Больше нуля

HI Выше

LE Меньше или равно нулю

LS Ниже или равно

LT Меньше нуля

MI Минус

NE Не равно нулю

PL Плюс

T Всегда истина2)

VC Переполнение сброшено

VS Переполнение установлено

____

1) См. «Коды условий».

2) Не используется в командах Вcс; вместо «ВТ» используйте BRA


MOVE.W (непосредственная,

# $FFFF,D0 регистровая)

MOVE.B (А0), (А1) (косвенная, косвенная)

ADD.L D5, (А2) + (прямая, косвенная с постинкрементом)

BTST.B #2$C0000 (непосредственная, абсолютная длинная)


В первом примере устанавливаются в 1 все 16 бит регистра D0 (символ «$» обозначает «шестнадцатиричное», а «#» указывает на «непосредственную» константу); вторая команда копирует байт из ячейки памяти, адрес которой находится в А0, в ячейку памяти, адрес которой находится в А1; третья прибавляет 32-разрядное знаковое целое к 4-байтовому («длинному») целому, которое начинается в памяти с байта, адресуемого через А2, после чего содержимое А2 увеличивается на 4; последняя команда проверяет бит 2 в ячейке памяти С0000Н, устанавливая соответствующим образом флаг нуля Z (для последующей команды условного перехода). Заметьте, что операнды cледуют в порядке — источник, приемник, что противоположно нотации МП 8086.

МП 68000 позволяет использовать почти все режимы адресации и размеры операндов с любой командой («Справочное пособие программиста МП 68000» исчерпывающе описывает все допустимые сочетания; наиболее полезная информация собрана в табл. 11.2). В результате написание изящных и эффективных программ на языке ассемблера оказывается относительно простой задачей. Например, работая с МП 8086 и желая проанализировать состояние флага порта ввода-вывода, вы должны будете сохранить и восстановить содержимое регистра AL и в сумме использовать 5 команд (PUSH, IN, TEST, POP, Jcc). МП 68000 позволяет выполнить ту же операцию с помощью всего двух команд: BTST и Всс; никакие регистры не нужны, потому что бит памяти (и, следовательно, регистры порта) можно проанализировать непосредственно. Более того, «автоинкрементный» режим адресации вроде «(А2) +» дает возможность работать с массивами. Хотя мы еще не описали все режимы адресации и команды, вы вполне сможете выполнить следующее упражнение.

Упражнение 11.1. Скопировать массив длиной $100 байт из таблицы, начинающейся в ячейке $А0000 в таблицу, начинающуюся в ячейке SA8000. При решении этой задачи будет полезна команд WGT метка (переход если больше нуля).


Режимы адресации. В приведенных выше примерах команд операции выполнялись над константами, содержимым регистров и содержимым ячеек памяти (или портов). Архитектура МП 68000 предусматривает богатый набор «режимов адресации» для определения этих операндов. В табл. 11.3 перечислены 12 режимов адресации, которые рассматриваются фирмой Motorola как 14. Вот что они значат:

Регистровая прямая адресация

Синтаксис: Dn (или An)

Пример: MOVE.W D0,D1

Операндом является содержимое указанного регистра


Непосредственная адресация

Синтаксис: #хххх

Пример: MOVE.B #$FF,D0

Операндом является указанная константа


Абсолютная адресация к памяти

Синтаксис: xxxx.W или xxxx.L

Пример: ADD.W D0JB000.W

Адрес операнда указан как непосредственная константа


Косвенная адресация

Синтаксис: (An)

Пример: SUB.W D0, (А0)

Указанный регистр содержит адрес операнда


Косвенная постинкрементная адресация

Синтаксис: (Аn) +

Пример: MOVE.B (А0) +, (А1) +

Аналогична косвенной, но после выполнения операции An инкрементируется на величину размера


Косвенная предекрементная адресация

Синтаксис: — 1Аn)

Пример: MOVE.W D0,-(A7)

An сначала декрементируется на величину размера, затем выполняется косвенная адресация


Косвенная адресация со смещением

Синтаксис: d16(An)

Пример: MOVE.L (А0),100(А0)

Адрес операнда определяется как (An) плюс 16-разрядное знаковое смещение d16


Косвенная индексная адресация со смещением

Синтаксис: d8(An,Xn.W [или. L]) (Хn может быть либо Dn, либо An)

Пример: MOVE.L 100(A0),100(A0,D7)

Адрес операнда определяется как (An) плюс (Хп) плюс 8-разрядное знаковое смещение d8


PC-относительная адресация со смещением

Синтаксис: d16(PC)

Пример: LEA 100(РС), АЗ

Адрес операнда отличается от адреса этой команды на величину 16-разрядного знакового смещения


PC-относительная адресация с индексом и смещением

Синтаксис: d8(PC,Xn.W или. L)

Пример: MOVE.W 100(PC,D0.W),D1

Адрес операнда отличается от адреса этой команды на величину суммы 8-разрядного знакового смещения и содержимого Хn.


Несколько пояснений: в первых двух режимах не адресуется память; адресуются регистры или непосредственные константы (т. е. константы, включенные в поток команд; они могут быть только источниками, но никогда не приемниками). Все остальные режимы служат для адресации памяти. Абсолютная адресация удобна для обращения к портам ввода- вывода или к отдельным ячейкам памяти.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*